package com.woorigil.social.domain.deal;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Random;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.woorigil.social.Context;

@Service
public class DealService {
//	public static Map<String, Set<Integer>> indexMap = new HashMap<String, Set<Integer>>();
//	public static Map<String, Deal> metaIdMap = new HashMap<String, Deal>();
	public static Map<String, List<Deal>> menuMap = new HashMap<String, List<Deal>>();
//	public static Date lastUpdatedAt;

	@Autowired DealDao dealDao;
	@Autowired CoupangMainDealDao coupangMainDealDao;
	@Autowired RecentViewDao recentViewDao;
	
//	public static Map<String, Integer> selectCountByMenu() {
//		Map<String, Integer> dealCountMap = new HashMap<String, Integer>();
//		for (String menu : menuMap.keySet()) {
//			dealCountMap.put(menu, menuMap.get(menu).size());
//		}
//		return dealCountMap;
//	}

//	public static Set<Integer> selectMetaIdsByIndex(String index) {
//		Set<Integer> indexes = indexMap.get(index);
//		if (indexes == null) {
//			return new HashSet<Integer>();
//		}
//		return indexes;
//	}
	
//	public static Deal selectDeal(String metaId) {
//		return metaIdMap.get(metaId);
//	}
	
	public DealViewList fidnAllRecentlyViewed(String sid, int offset) {
		List<RecentView> recentViews = recentViewDao.search(sid, offset);
		
		List<Deal> deals = new ArrayList<Deal>();
		for (RecentView recentView : recentViews) {
			Deal deal = dealDao.select(recentView.getDealId());
			if (deal != null) {
				deal.setViewDate(recentView.getInsertDate());
				deals.add(deal);
			}
		}
		return new DealViewList("", deals);
	}
	
	public List<Deal> selectRandomDeals(DealCondition condition) {
		//TODO 서버처음 뜰때 캐쉬하도록 함, 딜신규파싱시 초기화함
		int min = dealDao.selectMinId();
		int max = dealDao.selectMaxId();
		
		List<Integer> randomNums = new ArrayList<Integer>();
		Random r = new Random();
		for (int i=0; i<40; i++) {
			randomNums.add(min + r.nextInt(max-min));
		}

//		condition.setDealIds(randomNums);
		List<Deal> deals = dealDao.search(condition);
		return deals;
	}
	
	public List<Deal> selectFreeDeals(int count) {
		DealCondition condition = new DealCondition();
		condition.setFree(true);
		return dealDao.search(condition);
	}

	public DealViewList search(DealCondition condition) {
		int totalCount = dealDao.selectTotalCount(condition);
		List<Deal> deals = dealDao.search(condition);
		condition.setTotalItemCount(totalCount);
		return new DealViewList("", deals);
	}
	
//	public static List<Deal> selectDealsByMenu(Menu menu, String subMenu) {
//		if (Menu.RECOMMEND == menu) {
//			List<Deal> deals = new ArrayList<Deal>();
//			Random r = new Random();
//			for (int i=0; i<18; i++) {
//				int randomInt = r.nextInt(metaIdMap.size() - 1) + 1;
//				int count = 0;
//				for (String each : DealService.metaIdMap.keySet()) {
//					if (count == randomInt) {
//						deals.add(DealService.metaIdMap.get(each));
//					}
//					count++;
//				}
//			}
//			return deals;
//		}
//		return menuMap.get(menu.name() + StringUtils.trimToEmpty(subMenu));
//	}

//	public static List<Deal> selectFreeDeals(int count) {
//		List<Deal> searchedSocialDeals = new ArrayList<Deal>();
//		Set<Integer> metaIdSet = DealService.selectMetaIdsByIndex("할인권");
//		
//		int i = 0;
//		for (String metaId : metaIdMap.keySet()) {
//			Deal socialDeal = metaIdMap.get(metaId);
//			if (i < count && socialDeal.getSalesPrice() == 0 && !metaIdSet.contains(socialDeal.getMetaId())) {
//				searchedSocialDeals.add(socialDeal);
//				i++;
//			}
//		}
//		return searchedSocialDeals;
//	}

//	public List<Deal> selectDiscountDeals(int count) {
//		List<Deal> searchedSocialDeals = new ArrayList<Deal>();
//		Set<Integer> metaIdSet = DealService.selectMetaIdsByIndex("할인권");
//		if (metaIdSet == null) {
//			return searchedSocialDeals;
//		}
//		
//		int i = 0;
//		for (Integer dealId : metaIdSet) {
//			if (i < count) {
//				Deal deal = dealDao.select(dealId);
//				searchedSocialDeals.add(deal);
//				i++;
//			}
//		}
//		return searchedSocialDeals;
//	}
}
